package com.lans.SortAlgorithm;

import java.util.Arrays;

/*
 * @author: lans
 * @date: 2025/1/24
 * @name: 刘宇
 */
public class ShellSort {
    public static void main(String[] args) {
        int[] arr = {12, 34, 54, 2, 3};
        System.out.println("排序前的数组:"+ Arrays.toString(arr));
        shellSort(arr);
        System.out.println("排序后的数组:"+ Arrays.toString(arr));
    }
    //负责分组
    public static void shellSort(int[] arr){
        int gap= arr.length;
        while(gap>1){
            gap/=2;
            shellSort(arr,gap);
        }

    }
    //负责分组后,对每组元素进行插入排序
    public static void shellSort(int[] arr,int gap) {
        //非空判断 避免运行时异常
        if(arr == null){
            return;
        }
        //i是组的个数
        for (int i = gap; i < arr.length; i++) {
            int temp = arr[i];
            int j;
            for (j = i - gap; j >= 0 && arr[j] > temp; j -= gap) {
                arr[j + gap] = arr[j]; // 移动元素
            }
            arr[j + gap] = temp; // 放置temp在正确的位置
        }
    }
}
